{
  "nbformat": 4,
  "nbformat_minor": 0,
  "metadata": {
    "colab": {
      "name": "solve_non_interacting_system",
      "provenance": [],
      "collapsed_sections": [
        "JndnmDMp66FL"
      ]
    },
    "kernelspec": {
      "name": "python3",
      "display_name": "Python 3"
    }
  },
  "cells": [
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "view-in-github",
        "colab_type": "text"
      },
      "source": [
        "<a href=\"https://colab.research.google.com/github/google-research/google-research/blob/master/jax_dft/examples/solve_non_interacting_system.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "JndnmDMp66FL"
      },
      "source": [
        "##### Copyright 2020 Google LLC.\n",
        "\n",
        "Licensed under the Apache License, Version 2.0 (the \"License\");"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "hMqWDc_m6rUC",
        "cellView": "both"
      },
      "source": [
        "#@title Default title text\n",
        "# Licensed under the Apache License, Version 2.0 (the \"License\");\n",
        "# you may not use this file except in compliance with the License.\n",
        "# You may obtain a copy of the License at\n",
        "#\n",
        "# https://www.apache.org/licenses/LICENSE-2.0\n",
        "#\n",
        "# Unless required by applicable law or agreed to in writing, software\n",
        "# distributed under the License is distributed on an \"AS IS\" BASIS,\n",
        "# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n",
        "# See the License for the specific language governing permissions and\n",
        "# limitations under the License."
      ],
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "29bi9k9toyk3"
      },
      "source": [
        "# Installation"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "sKBGRy5foj-u"
      },
      "source": [
        "# For GPU runtime\n",
        "!pip install --upgrade jax jaxlib==0.1.62+cuda110 -f https://storage.googleapis.com/jax-releases/jax_releases.html"
      ],
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "S4pHvFYbo-Nn"
      },
      "source": [
        "# Install jax-dft\n",
        "!git clone https://github.com/google-research/google-research.git\n",
        "!pip install google-research/jax_dft"
      ],
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "W5jsY3FZrSCZ"
      },
      "source": [
        "# Import"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "XKioKmifrJb4"
      },
      "source": [
        "import jax\n",
        "from jax import config\n",
        "from jax_dft import scf\n",
        "from jax_dft import utils\n",
        "import matplotlib.pyplot as plt\n",
        "import numpy as np\n",
        "\n",
        "# Set the default dtype as float64\n",
        "config.update('jax_enable_x64', True)"
      ],
      "execution_count": 7,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "omW3f63atHYk"
      },
      "source": [
        "print(f'JAX devices: {jax.devices()}')"
      ],
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "GbVORinfrVoK"
      },
      "source": [
        "# Run"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "lpRJfeRorUD_",
        "outputId": "d4f5cb10-03a5-4e68-bdc4-a7f795918ce7",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 282
        }
      },
      "source": [
        "num_electrons = 2 # @param{'type': 'integer'}\n",
        "\n",
        "grids = np.arange(-256, 257) * 0.08\n",
        "external_potential = utils.get_atomic_chain_potential(\n",
        "    grids=grids,\n",
        "    locations=np.array([-0.8, 0.8]),\n",
        "    nuclear_charges=np.array([1., 1.]),\n",
        "    interaction_fn=utils.exponential_coulomb)\n",
        "\n",
        "density, total_eigen_energies, _ = scf.solve_noninteracting_system(\n",
        "    external_potential, num_electrons=num_electrons, grids=grids)\n",
        "\n",
        "print(f'total energy: {total_eigen_energies}')\n",
        "plt.plot(grids, density, label='density')\n",
        "plt.plot(grids, external_potential, label='potential')\n",
        "plt.legend(loc=0)\n",
        "plt.show()"
      ],
      "execution_count": 14,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "total energy: -2.650539439312981\n"
          ],
          "name": "stdout"
        },
        {
          "output_type": "display_data",
          "data": {
            "image/png": "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\n",
            "text/plain": [
              "<Figure size 432x288 with 1 Axes>"
            ]
          },
          "metadata": {
            "tags": [],
            "needs_background": "light"
          }
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "LLEOs28wsTjQ"
      },
      "source": [
        ""
      ],
      "execution_count": null,
      "outputs": []
    }
  ]
}